/*
 * PopulardadeGlobal.java
 *
 * Copyright 2011 Monica S. Cavalcante.
 * All rights reserved.
 *
 * This file is part of Mandatory Arrest
 *
 * MandatoryArrest is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * MandatoryArrest is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with MandatoryArrest. If not, see <http://www.gnu.org/licenses/>.
 *
 * Contributors:
 * Isabella Pessoa isabella.agp at gmail.com
 * Michell Jacks michelljacks at gmail.com
 * Monica Santana monicaasc.cc at gmail.com
 */

package br.edu.ufcg.dsc.lp2.projeto.model;

import java.util.ArrayList;
import java.util.List;

import br.edu.ufcg.dsc.lp2.projeto.model.exceptions.NumeroInvalidoException;

/**
 * Algoritmo de recomendacao baseado em um ranking de maior pontuacao entre os
 * estabelecimentos cadastrados.
 * 
 * @author Monica Santana <monicaasc.cc at gmail.com>
 */
public class PopularidadeGlobal {

	/**
	 * Retorna uma lista com os n locais com maior popularidade.
	 * 
	 * @param num
	 *            Numero de recomendacoes.
	 * @param locais
	 *            Lista com os estabelecimentos previamente ordenados.
	 * @return Lista com os n melhores estabelecimentos.
	 * @throws NumeroInvalidoException 
	 
	 */
	public static List<Estabelecimento> retorna(String num,
			List<Estabelecimento> locais) {
		if (num == null || num.equals("")) {
			throw new NumeroInvalidoException("Numero nao pode ser vazio ou nulo");
		}
		if (Integer.parseInt(num) <= 0) {
			throw new NumeroInvalidoException("Numero deve ser maior que 0");
		}
		if (Integer.parseInt(num) > locais.size()) {
			throw new NumeroInvalidoException("Numero maior que o numero de estabelecimentos");
		}
		
		int numero = Integer.parseInt(num);
		List<Estabelecimento> copia = new ArrayList<Estabelecimento>();
		copia.addAll(locais); // E criada uma copia pra nao modificar a
								// original.
		Ordena.ordenaPopularidadeMaiores(locais);
		List<Estabelecimento> estabelecimentos = new ArrayList<Estabelecimento>();
		for (int i = 0; i < numero; i++) {
			estabelecimentos.add(locais.get(i));
		}
		return estabelecimentos;
	}

}
